/**
*  
* @Function 区域和部门同步service 
* @ProjectName credit-data-platform 
* @PackageName com.py.credit.service.impl    
* @FileName AreaDeptServiceImpl.java    
* @Date 2018年6月5日下午1:56:11
* @Author Min DongXv
* @Copyright (c) 2018, 金电联行 All Rights Reserved.   
*   
*/  
package com.py.credit.service.impl;

import java.util.LinkedHashMap;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;

import com.py.credit.common.ServiceException;
import com.py.credit.common.logs.ExceptionLogger;
import com.py.credit.common.rest.RestServiceResult;
import com.py.credit.dao.AreaDeptDao;
import com.py.credit.entity.AreaName;
import com.py.credit.entity.Dept;
import com.py.credit.entity.SysUser;
import com.py.credit.service.AreaDeptService;
import com.py.credit.service.RemoteBaseService;
import com.py.framework.core.entity.SysAreaEntity;
import com.py.framework.core.entity.SysOfficeEntity;

/**
 * 
 * @Function 区域和部门同步service
 * @ClassName AreaDeptServiceImpl
 * @Date 2018年6月5日 下午1:56:11
 * @Author Min DongXv
 * 
 */
@Service
public class AreaDeptServiceImpl implements AreaDeptService {

	@Autowired
	private AreaDeptDao areaDeptDao;

	@Autowired
	private RemoteBaseService remoteBaseService;

	/**
	 *
	 * @Function 同步区域信息
	 * @FileName AreaDeptServiceImpl.java
	 * @MethodName syncArea
	 * @param area
	 * @Date 2018年6月5日 下午1:56:22
	 * @Author Min DongXv
	 *
	 */
	@Override
	@Transactional(rollbackFor = Exception.class)
	public void syncArea() {
		// 远程获取所有区域信息
		RestServiceResult<List<SysAreaEntity>> areaResult = remoteBaseService.getAllAreas(null, null);
		if (null != areaResult && RestServiceResult.CODE_SUCCESS == areaResult.getCode()
				&& !CollectionUtils.isEmpty(areaResult.getData())) {
			// 删除所有区域
			areaDeptDao.delArea();
			// 批量插入所有区域信息
			areaDeptDao.addArea(areaResult.getData());
			// 查询区域数量
			Integer count = areaDeptDao.getAreaCount();
			if (count <= 0) {
				ExceptionLogger.error("AreaDeptServiceImpl#syncArea", "同步区域信息异常！未能成功插入数据！");
				throw new ServiceException("同步区域信息异常！新增区域数据异常！");
			}
		} else {
			ExceptionLogger.error("AreaDeptServiceImpl#syncArea", "同步区域信息异常！返回结果无区域信息数据!");
		}
	}

	/**
	 *
	 * @Function 同步部门信息
	 * @FileName AreaDeptServiceImpl.java
	 * @MethodName syncDept
	 * @param office
	 * @Date 2018年6月5日 下午1:56:22
	 * @Author Min DongXv
	 *
	 */
	@Override
	@Transactional(rollbackFor = Exception.class)
	public void syncDept() {
		// 远程获取所有部门信息
		RestServiceResult<List<SysOfficeEntity>> deptResult = remoteBaseService.getOfficesByAreaId(null, null);
		if (null != deptResult && RestServiceResult.CODE_SUCCESS == deptResult.getCode()
				&& !CollectionUtils.isEmpty(deptResult.getData())) {
			// 删除所有部门
			areaDeptDao.delDept();
			// 批量插入所有部门信息
			areaDeptDao.addDept(deptResult.getData());
			// 查询部门数量
			Integer count = areaDeptDao.getDeptCount();
			if (count <= 0) {
				ExceptionLogger.error("AreaDeptServiceImpl#syncDept", "同步部门信息异常！未能成功插入数据！");
				throw new ServiceException("同步部门信息异常！新增部门数据异常！");
			}
		} else {
			ExceptionLogger.error("AreaDeptServiceImpl#syncDept", "同步部门信息异常！返回结果无部门信息数据!");
		}
	}
	
	@Override
	@Transactional(rollbackFor = Exception.class)
	public void syncUser() {
		// 远程获取所有部门信息
		RestServiceResult<List<SysUser>> userResult = remoteBaseService.getUsers();
		if (null != userResult && RestServiceResult.CODE_SUCCESS == userResult.getCode()
				&& !CollectionUtils.isEmpty(userResult.getData())) {
			// 删除所有部门
			areaDeptDao.delUser();
			// 批量插入所有部门信息
			areaDeptDao.addUser(userResult.getData());
			// 查询部门数量
			Integer count = areaDeptDao.getUserCount();
			if (count <= 0) {
				ExceptionLogger.error("AreaDeptServiceImpl#syncUser", "同步用户信息异常！未能成功插入数据！");
				throw new ServiceException("同步用户信息异常！新增用户数据异常！");
			}
		} else {
			ExceptionLogger.error("AreaDeptServiceImpl#syncUser", "同步用户信息异常！返回结果无用户信息数据!");
		}
	}

	@Override
	public AreaName getAreaName(int deptId) {
		AreaName areaName=areaDeptDao.getAreaName(deptId);
		return areaName;
	}

	@Override
	public List<Dept> getDeptName(int regionCode) {
		List<Dept> dept=areaDeptDao.getDeptName(regionCode);
		return dept;
	}
}
